package cn.cqs.redisitem.linestructure;

/**
 * @discription :单链表
 * @author: cqs
 * @date: 2020-09-12 9:43
 */
public class Node {
//    内容
    private int data;
//    下一个节点
    private Node next;

    public Node() {
    }

    public Node(int data) {
        this.data = data;
    }

    // 节点信息追加（在最末尾）
    public  Node append(Node node){
//       return this.next=node;
//        当前节点
        Node currentNode=this;
        while (true) {
//            获取下一个节点
            Node nextNode = currentNode.getNext();
            if (nextNode == null) {
                break;
            }
            currentNode =nextNode;
        }
            currentNode.next=node;
        return currentNode;
    }

    /**
     * 功能描述 :在指定元素之间新增
     * @author cqs
     * @date 2020/9/12

     * @return void
     */

    public void after(Node node){
        Node currentNode=this;
//        当前节点旧的下一个节点
       Node ducNext= currentNode.next;
//       当前节点一下节点设置为新节点
        currentNode.next=node;
//       当前节点的旧的下一个节点作为新节点下一个节点
        node.next = ducNext;

    }

   /**
    * 功能描述 :删除节点的下一个节点
    * @author cqs
    * @date 2020/9/12
    * @return void
    */

    public void remove(){
        Node currentNode=this;
//        获取当前节点下下一个节点;
       Node twonext= currentNode.next.next;
//       将当前节点下一个节点替换成下下一个节点值
       currentNode.next=twonext;


    }

    /**
     * 功能描述 :判断是否是最后一个节点
     * @author cqs
     * @date 2020/9/12

     * @return boolean
     */

    public boolean isLastNode(){
        return this.next==null;
    }
/**
 * 功能描述 :显示节点信息
 * @author cqs
 * @date 2020/9/12

 * @return void
 */

    public void show(){
        Node currenNode=this;

        while (true){
            Node nextNode=currenNode.next;
            System.out.println(currenNode.getData());
            if(nextNode==null){
                break;
            }
            currenNode=nextNode;
        }
    }


    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}
